################################################################################
# Ingroup vs Intragroup Annotation Quality
################################################################################
################################################################################
# Dependencies
################################################################################
library(dplyr)
library(tidyr)
library(readr)
library(stringr)
library(lubridate)
library(ggplot2)
library(ggthemes)
library(scales)
library(irr)
library(tidycomm)
library(forestmangr)
################################################################################
# Load Data 
################################################################################
rm(list=ls())
# - set dir
args = commandArgs()

scriptName = args[substr(args,1,7) == '--file=']

if (length(scriptName) == 0) {
  scriptName <- rstudioapi::getSourceEditorContext()$path
} else {
  scriptName <- substr(scriptName, 8, nchar(scriptName))
}

pathName = substr(
  scriptName, 
  1, 
  nchar(scriptName) - nchar(strsplit(scriptName, '.*[/|\\]')[[1]][2])
)

setwd(pathName)
################################################################################
# Load all annotation Sets
################################################################################
org_df <- read_csv("../data/citizen_science_for_annots_27012022.csv")

df1 <- read_csv("../annotations/chatGPT/output_zero_shot/label_hatespeech_round_main_definition_1.csv")
df2 <- read_csv("../annotations/chatGPT/output_zero_shot/label_hatespeech_round_main_definition_2.csv")
df3 <- read_csv("../annotations/chatGPT/output_zero_shot/label_hatespeech_round_main_definition_3.csv")

################################################################################
# Transform into one dataframe 
################################################################################

for(i in 1:3){
  if(i == 1){
    tmp <- df1
  } 
  
  if(i == 2){
    tmp <- df2
  }
  
  if(i == 3){
    tmp <- df3
    }
  
  tmp <- tmp %>% dplyr::mutate(IsHateSpeech = ifelse(grepl('\\"Label\\": \\"False\\"|Der Tweet enthält keine Hate Speech|Label: False|False|false|This tweet does not contain hate speech|The tweet you provided is not an example of hate speech',label) == T, 0,
                                                     ifelse(grepl('\\"Label\\": \\"True\\"|This tweet contains hate speech|Label: True|True', label) == T, 1,NA))) %>% 
                 dplyr::select(-c(Kommentar)) %>% 
                 dplyr::mutate(IsHateSpeech = ifelse(is.na(IsHateSpeech) == T, 0, IsHateSpeech))
  
  tmp <- tmp %>% dplyr::mutate(toxic = ifelse(grepl('\\"Target\\": \\"Toxisch|\\"Target\\": \\"Toxisch|\\"Target\\": \\"Toxisch |\\"Target\\":\\"Toxisch\\"|\\"Target\\": \\"Toxisch\\"|Target: Toxisch|\\"Target\\": \\"Toxic\\"|Target: Toxic|\\"Target\\": \\"Toxisch|\\"Target\\":\\"Toxisch|\\"Target\\": \\"Toxisch', label) == T, 1, 0),
                               sex = ifelse(IsHateSpeech == 0, 0,
                                            ifelse(grepl('\\"Target\\": \\"Gender|\\"Target\\": \\"Gechlecht|\\"Target\\": \\"Gechlecht |\\"Target\\":\\"Geschlecht\\"|\\"Target\\": \\"Geschlecht\\"|Target: Geschlecht|\\"Target\\": \\"Gender\\"|Target: Gender|\\"Target\\": \\"Geschlecht|\\"Target\\":\\"Geschlecht|\\"Target\\": \\"Gechlecht', label) == T, 1, 0))) %>%
                  dplyr::mutate(age = ifelse(IsHateSpeech == 0, 0,
                               ifelse(grepl('\\"Target\\":\\"Alter\\"|\\"Target\\": \\"Alter\\"|Target: Alter|\\"Target\\": \\"Alter', label) == T, 1, 0))) %>%
                  dplyr::mutate(sexuality = ifelse(IsHateSpeech == 0, 0,
                                     ifelse(grepl('\\"Target\\":\\"Sexualität\\"|\\"Target\\": \\"Sexualität\\"|Target: Sexualität|\\"Target\\": \\"Ledige\\"|\\"Target\\": \\"Sexualität', label) == T, 1, 0))) %>% 
                  dplyr::mutate(religion = ifelse(IsHateSpeech == 0, 0,
                                    ifelse(grepl('\\"Target\\":\\"Religion\\"|\\"Target\\": \\"Religion\\"|Target: Religion|\\"Target\\": \\"Religion', label) == T, 1, 0)),
                  nationality = ifelse(IsHateSpeech == 0, 0,
                                       ifelse(grepl('Target: Nationality|\\"Target\\": \\"Gruppe: Nationalität\\"|\\"Target\\":\\"Nationalität\\"|\\"Target\\": \\"Nationalität\\"|Target: Nationalität|\\"Target\\": \\"Nationality\\"|\\"Target\\": \\"Nationalität/Herkunft\\"|\\[\\"Nationalität\\"\\]|\\"Target\\": \\"Nationalität|\\"Target\\": \\"Herkunft|\\"Target\\": \\"Ethnicity|\\"Target\\": \\"Ethnicity\\"', label) == T, 1, 0)),
                  impairments = ifelse(IsHateSpeech == 0, 0,
                                       ifelse(grepl('\\"Target\\":\\"Beeinträchtigung\\"|\\"Target\\": \\"Beeinträchtigung\\"|Target: Beeinträchtigung|\\"Target\\": \\"Beeinträchtigung', label) == T, 1, 0)),
                  social_status = ifelse(IsHateSpeech == 0, 0,
                                         ifelse(grepl('\\"Target\\": \\"sozialer Status\\"|\\"Target\\":\\"Status\\"|\\"Target\\": \\"Status\\"|Target: Status|\\"Target\\": \\"Bildung\\"|\\"Target\\":\\"Bildung\\"|\\"Target\\": \\"Berufsgruppe\\"|Personengruppe|\\"Target\\": \\"Status|\\"Target\\": \\"Berufsgruppe|Target: Berufsgruppe|\\"Target\\": \\"Bildung', label) == T, 1, 0)),
                  politics = ifelse(IsHateSpeech == 0, 0,
                                    ifelse(grepl('\\"Target\\":\\"Politik\\"|\\"Target\\": \\"Politik\\"|Target: Politik|\\"Target\\": \\"Politik|\\"Target\\": \\"Umweltaktivisten\\"|\\"Target\\": \\"Gruppe: Klimaaktivisten', label) == T, 1, 0)),
                  appearance = ifelse(IsHateSpeech == 0, 0,
                                      ifelse(grepl('\\"Target\\":\\"Aussehen\\"|\\"Target\\": \\"Aussehen\\"|Target: Aussehen|\\"Target\\": \\"Aussehen', label) == T, 1, 0)),
                  other = ifelse(IsHateSpeech == 0, 0,
                                 ifelse(grepl('\\"Target\\":\\"Andere\\"|\\"Target\\": \\"Andere\\"|Target: Andere|\\"Target\\": \\"Keine spezifische Zielgruppe genannt\\"|\\"Target\\": \\"Sonstiges\\"|\\"Target\\": \\"Keine spezifische Gruppe\\"|Target: Sonstiges|\\"Target\\": \\"Andere|\\"Target\\": \\"Sonstige|Argumente gegen Veganer|Target: Other|kein spezifisches Zielgruppe|\\"Target\\": \\"keine spezifische Zielgruppe|\\"Target\\": \\"sonstige\\"|\\"Target\\": \\"keine spezifische Zielgruppe|\\"Target\\": \\"Andere', label) == T, 1, 0)),
                  Group = "chatGPT",
                  Annotator = i)
  
  tmp <- dplyr::bind_cols(tmp,org_df)
  tmp <- tmp %>% dplyr::select(c(ArticleID,ID,Kommentar,Titel,Text,Group,Annotator,IsHateSpeech,toxic,age,sex,sexuality,religion,nationality,impairments,social_status,politics,appearance,other))
  if(i == 1){
    df1 <- tmp
  }
  
  if(i == 2){
    df2 <- tmp
  }
  
  if(i == 3){
    df3 <- tmp
  }
}


fin_df <- dplyr::bind_rows(df1,df2,df3)
fin_df %>% group_by(IsHateSpeech, toxic) %>% summarise(n = n())
fin_df <- fin_df %>% mutate(IsHateSpeech = ifelse(toxic == 1, 1, IsHateSpeech))
fin_df %>% group_by(IsHateSpeech, toxic) %>% summarise(n = n())

fin_df %>% mutate(Target = if_else(rowSums(select(.,age,sex,sexuality,religion,nationality,impairments,social_status,politics,appearance,other,toxic)) > 0, 1, 0)) %>% group_by(IsHateSpeech,Target) %>% summarise(n = n())

write_csv(fin_df, "../annotations/chatGPT/chatgpt_set_zeroshot_main_def_for_analysis.csv")
